剛剛幫中部某大學校弄完了一個算是『偽』報表的功能
寫了一個Action + View,上頭弄了美美的圖表(Chart)
於是,又在jQuery UI Dialog裡頭掛上iFrame,達到Web的偽報表
剛開始的時候...感覺還不錯,突然心血來潮,給他在不關閉網頁的情況下
嘗試開啟兩次....結果...
所有網頁元素都會更新...只有那兩個動態產生的統計圖表...
所有網頁元素都會更新...只有那兩個動態產生的統計圖表...
產生動態圖檔的action是這麼寫的...
//落落長的產生圖檔過程略過...
using(MemoryStream _stream = new MemoryStream())
{
chart.SaveImage(ms,ChartImageFormat.Png);
return new FileContentResult(ms.ToArray());
}
View裡頭的動態圖檔欄位是這麼寫的...
<img src="@Url.Action(產生圖檔的action)"
想不到啊...第一次產生圖檔都正確...在不關閉jq dialog所在的網頁下,
重新執行,不但動態圖表不會更新,居然連這個action都不會被執行...
最後,在不想把圖檔儲存到server的磁碟機上的前提下,午覺一睡醒...想起了..base64的方法
於是把action改成了method...
private string generateChart(List<data> data)
{
//略....
using(MemoryStream _stream = new MemoryStream())
{
chart.SaveImage(ms,ChartImageFormat.Png);
return Convert.ToBase64String(ms.ToArray);
}
}
Action的部份
//又略過...
ViewBag.ChartString = this.generateChart(data);
View的部份改成
<img src="data:image/png;base64,@ViewBag.ChartString" />
打完收工~~
很納悶的是...原本的寫法,jq dialog開啟的時候,Url.Acion有正確執行,
所以,看到了正確的圖表
不離開網頁的情況下,再一次執行包含圖表的jq dialog(用dialog包iframe顯示網頁),
圖檔還在,但是沒有重新繪製,原本以為是cache作怪,怪怪...我沒設定cache..
在action裡頭設定了中斷點,終於發現..它根本沒有被執行
真是怪事....目前暫時用這種鳥方法解決有待哪位大師來幫我解惑啦~~
當時之所以不想把圖檔儲存成檔案,是為了避免多人使用時的檔案鎖定問題
卻意外發現這個更鳥的問題....
獅子說這是你的問題....
iT邦幫忙MVPwiselou提到:
鳥的問題...
也是大家的問題...
ted99tw提到:
也是大家的問題
有這個情形請打免費電話控巴控控 控九逆 控控控
iT邦幫忙MVPwiselou提到:
當時之所以不想把圖檔儲存成檔案,是為了避免多人使用時的檔案鎖定問題
即然圖檔不需存下來,如果圖檔沒有太複雜,
或者圖檔裡面沒有什麼敏感資料的話,
那就只要吐出有參數的url叫 Google Charts
若 google charts 無法符合原需求,自己畫比較簡單的話,
把 render 出來的圖,獨立成一個接受參數畫出來的 url,
然後在 dialog 裡去 query 這圖的 url,
也許就能從 web 的 log 看到有沒有在做 圖形的 query。
我之前曾處理 ASP.net 的圖型認證(就是畫面出現小小亂數認證碼,防Bot)
是用 ASHX 泛型處理來呈現圖型認證, 樓主也可以試看看...
不過 ASP.net MVC 沒用過~找篇參考文給您看看
利用泛型處理常式(ashx) 實作 .Net MVC 2 的圖形驗證功能
asp.net webform application 這招好使...但...mvc...常出問題
搞不好是瀏覽器的因素,只要url沒變,他就不會去更新已經cache起來的圖檔。可以試是在圖檔url後面加一個隨機變化的參數看看。
iT邦幫忙MVPfillano提到:
參數
這季節就試試這個... "&password=翁嗎尼貝妹哞"
從楞嚴咒隨機撈,變化比較多。
...大師說的有道理...
我報表的作法是View裡放iframe
然後View裡的表單post到這個iframe去
然後處理的Action送出CrystalReport的內容
不過你的問題是指瀏覽器快取嗎?
如果是的話, 用這個看看
Response.Cache.SetCacheability(HttpCacheability.NoCache);
我之所以不考慮用Google Charts
是因為免費的第三方服務
不知道能用到幾時?
在過去有一堆免費的網路服務, 說停就停
一點保障也沒有
一旦你用了它們, 要移植到其他的報表也沒那麼容易了
以前遇過類似的問題,後來找人幫忙解決
印象是dialog包住後不會主動更新圖表,要關閉再開才會
忘記怎麼解決的
會是手動解決的嗎...
temo提到:
關閉再開才會
我的問題是...必須離開該頁才會...
整個frame只有那個圖表的action沒有更新
下中斷點在圖表的action,根本沒被執行……
後來翻翻記錄,我那個是給圖表塞一個session還是什麼,就是在網頁重新整理時給他強制更新執行